﻿using System.Collections.Generic;
using UnityEngine;
using ProtoBuf.Message;



public class RedPointTip {

    public Dictionary<string,int> redPoint;//服务器发来的红点数据
    public int RedAcrtivitys = 0;//用于表示活动红点一级标签的数量
    public enum Red
    {
        rewardCenter,//领奖中心 主界面菜单      0
        copyRewardInfo,// 攻略前线 主界面菜单
        openActivity,//开服七天活动 主界面菜单
        wonderfulActivity,//精彩活动 主界面菜单
        worldTree,//世界之树  主界面菜单
        queue,//队列 主界面菜单                5
        friends,//好友 主界面菜单
        message,//消息 主界面菜单
        backpack,//背包  主界面显示
        rwFWtMCount,//右侧外拉按钮红点显示 主界面菜单
        shop,//商店  主界面菜单                10
        dailyTask,// 每日任务
        achievement,// 成就

        friendsEnergy,//领取耐力  一级菜单      
        friendsApply,////好友申请 一级菜单
        dailySign,//每日签到 一级菜单
        moonlightRestaurant,//月光餐厅 一级菜单 
        totalLogin,//累计登录一级菜单           15
        rechargeSingle,//单充送礼一级菜单       
        firstRechargeGift,//首冲礼包 一级菜单
        monthCardReward,//月卡奖励 一级菜单


        vipBoon,//VIP福利
        openServerSpree, //开服狂欢 一级菜单
        celebrationActivity,//庆典活动 一级菜单
        rechargeTotal,//累充奖励 一级菜单
        openServerFund,//开服基金 一级菜单
        fightRedNameTimes,//攻打叛军数 一级菜单
        killRedNameTimes,//击杀叛军数 一级菜单
        robTreasureTimes,//夺宝次数 一级菜单
        pvpWinTimes,//竞技场胜利次数 一级菜单
        mainCopyWinTimes,//主线副本胜利次数 一级菜单
        aincradStars,//试炼之地星数 一级菜单
        costTotal,//累计消费 一级菜单
        festival,//节日活动 一级菜单
        update,//更新活动 一级菜单
        fortuneCat,//藏宝箱一级菜单
        continuedRecharge,//连充送礼一级菜单
        warriorRescruitTimes,//招募送礼一级菜单
        warriorGetSpecial,//角色收集一级菜单
        kaiGongActivity, //攻略福利一级菜单
        //warriorWeightImprove,//橙卡招募一级菜单

        warriorFrag,//武者碎片 一级菜单        
        equipmentFrag,//装备碎片 一级菜单        20
        warriorResruitKing,//王者招募 一级菜单  
        warriorResruit,//招募 一级菜单          
        shopVipGift,//商店VIP礼包 一级菜单

        dailySignOrdinary,//每日签到_普通 标签   
        dailySignLuxury,//每日签到_豪华 标签      25
        openServerFundChild,//开服基金 标签
        allPeopleBoon ,//全民福利

        //节日活动标签 12个
        totalLoginFestival,//累计登录
        rechargeSingleFestival,//单充送礼
        openServerSpreeFestival,//开服狂欢
        celebrationActivityFestival,//庆典活动
        rechargeTotalFestival,//累计充值
        fightRedNameTimesFestival,//悬赏任务
        killRedNameTimesFestival,//悬赏boss
        robTreasureTimesFestival,//夺宝次数
        pvpWinTimesFestival,//竞技场
        mainCopyWinTimesFestival,//主线副本  
        aincradStarsFestival,//试炼之地
        costTotalFestival,//累计消费

        //更新活动标签 12个
        totalLoginUpdate,//累计登录
        rechargeSingleUpdate,//单充送礼
        openServerSpreeUpdate,//开服狂欢
        celebrationActivityUpdate,//庆典活动
        rechargeTotalUpdate,//累计充值
        fightRedNameTimesUpdate,//悬赏任务
        killRedNameTimesUpdate,//悬赏boss
        robTreasureTimesUpdate,//夺宝次数
        pvpWinTimesUpdate,//竞技场
        mainCopyWinTimesUpdate,//主线副本  
        aincradStarsUpdate,//试炼之地
        costTotalUpdate,//累计消费

        halfMonthOpenActivity,//开服14天
        luxuryEquipment,//超级装备

    }

    public void ReceiveMsg(List<RedPoint> info)
    {
        foreach(RedPoint msg in info)
        {
            redPoint[msg.type] = msg.value;
        }
    }

    public void ReduceActivitys()
    {
        RedAcrtivitys--;
        if (RedAcrtivitys < 1)
            StaticData.redTips.SetPointState(Red.wonderfulActivity, 0);
    }

    public void AddActivitys()
    {
        RedAcrtivitys++;
    }

    public RedPointTip()
    {
        redPoint = new Dictionary<string, int>();
    }

    //获取红点状态信息
    public bool GetStateByType(Red type)
    {
        if (redPoint.ContainsKey(type.ToString()))
        {
            if (redPoint[type.ToString()] == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            Debug.LogWarning("Error:未包含这个类型的定义！" + type);
            return false;
        }
    }

    //设置红点隐藏状态
    public void HideByType(Red type)//这个在三级菜单调用
    {
        if (redPoint.ContainsKey(type.ToString()))
        {
            redPoint[type.ToString()] = 0;
        }
        else
        {
            Debug.LogWarning("Error:未包含这个类型的定义！");
        }
    }

    public void AddHander()
    {
        NetAPI.RegistSocketHandler(OpDefine.SCRedPoint, RedPiontCallBack);
    }


    public void RedPiontCallBack(object obj)
    {
        Debug.Log("RedPiontCallBack()");
        SCRedPoint pm = (SCRedPoint)obj;
        
        List<RedPoint> info = pm.redPointList;
        foreach (RedPoint msg in info)
        {
            if (redPoint.ContainsKey(msg.type))
            {
                redPoint[msg.type] = msg.value;
            }
        }
        SendRedPiontMsg();
    }

    public void SendRedPiontMsg()
    {
        DataMessageTool.AddMessage(DataMessage.RED_POINT, redPoint);
    }

    public void SetPointState(Red type, int state)
    {
        string Type = type.ToString();
        if (redPoint.ContainsKey(Type))
        {
            redPoint[Type] = state;
            if(type != Red.openActivity)
                SendRedPiontMsg();
        }
        else
        {
            Debug.LogWarning("Error:未包含这个类型的定义！");
        }
    }

}
